package me.zhengjie.modules.website.domain;

import java.io.Serializable;
import java.util.Date;

import com.fasterxml.jackson.annotation.JsonIgnore;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotBlank;
import lombok.Data;
import me.zhengjie.base.BaseEntity;

import javax.persistence.*;

/**
 * 预约访客表（VisitReservationTable）实体类
 *
 * 该实体类用于描述访客预约的信息，包含预约日期、时间段、已预定人数、剩余名额等信息。
 * 用于前端展示预约情况和管理预约的逻辑。
 *
 * @author system
 * @since 2024-10-23 22:20:17
 */
@Entity
@Data
@Table(name = "visit_reservation_table")
@ApiModel(value = "VisitReservationTable", description = "预约场次管理表")
public class VisitReservationTable extends BaseEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 预约ID
     * <p>
     * 该字段为每个预约的唯一标识符，由数据库自动生成。
     * </p>
     */
    @Column(name = "reservation_id")
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @ApiModelProperty(value = "预约ID", required = true, example = "1")
    private Long reservationId;

    /**
     * 预约类型
     * <p>
     * 该字段表示预约的类型，例如“访客预约”、“活动预约”等。
     * </p>
     */
    @Column(name = "reservation_type")
    @ApiModelProperty(value = "预约类型", required = true, example = "临时场次")
    private String reservationType;

    /**
     * 访客预约日期
     * <p>
     * 该字段表示访客预约的日期。不可为空，必须提供有效的日期格式。
     * </p>
     */
    @Column(name = "visit_date")
    @ApiModelProperty(value = "预约日期", required = true, example = "2024-10-23")
    private Date visitDate;

    /**
     * 访客预约时间段
     * <p>
     * 该字段表示访客预约的时间段。不可为空，必须提供有效的时间段。
     * </p>
     */
    @Column(name = "visit_time_slot")
    @ApiModelProperty(value = "预约时间段", required = true, example = "上午或者下午")
    private String visitTimeSlot;

    /**w
     * 预定人数
     * <p>
     * 该字段表示当前预约时间段内已预定的访客人数。不可为空，必须提供有效的数字。
     * </p>
     */
    @Column(name = "reserved_people")
    @ApiModelProperty(value = "可预定总人数", required = true, example = "5")
    private Integer reservedPeople;

    /**
     * 已预定人数
     * <p>
     * 该字段表示已经通过预约系统确认的访客人数。不可为空，必须提供有效的数字。
     * </p>
     */
    @Column(name = "booked_people")
    @ApiModelProperty(value = "已预定人数", required = true, example = "4")
    private Integer bookedPeople;

    /**
     * 剩余名额
     * <p>
     * 该字段表示当前预约时间段的剩余名额。不可为空，必须提供有效的数字。
     * </p>
     */
    @Column(name = "remaining_slots")
    @ApiModelProperty(value = "剩余名额", required = true, example = "1")
    private Integer remainingSlots;

    /**
     * 预约状态
     * <p>
     * 该字段表示预约的当前状态，通常为以下几种状态：
     * </p>
     */
    @Column(name = "reservation_status")
    @ApiModelProperty(value = "预约状态", required = true, example = "可预约")
    private String reservationStatus;


    @Transient
    @ApiModelProperty(value = "时间段", required = true, example = "时间段")
    private Date[] dates;
}
